package com.weixing.mall.provider.model.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.google.common.collect.Lists;
import com.weixing.mall.base.enums.WhetherEnum;
import com.weixing.mall.core.enums.OrderSysTagEnum;
import com.weixing.mall.provider.api.model.enums.OrderTypeEnum;
import com.weixing.mall.provider.model.domain.AfterSale;
import com.weixing.mall.provider.model.domain.OrderOperation;
import com.weixing.mall.provider.model.enums.*;
import lombok.Data;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 订单详情
 *
 * @author  gjq
 * @date  2019/9/30
 * @since  1.0
 **/
@Data
public class OrderDetilVo {

    /**
     * 订单id
     */
    private Long id;
    /**
     * 会员id
     */
    private Long buyerId;
    /**
     * 订单编号
     */
    private String orderSn;
    /**
     * 订单金额
     */
    private Double orderPrice;
    /**
     * 订单实付金额
     */
    private Double actualPrice;
    /**
     * 物流单号
     */
    private String expressSn;
    /**
     * 物流名称
     */
    private String expressName;
    /**
     * 原始物流单号
     */
    private String beforExpressSn;
    /**
     * 订单支付状态 0未支付；1已支付
     */
    private WhetherEnum isPay;
    /**
     * 支付流水号
     */
    private String outTradeNo;
    /**
     * 订单支付时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date payTime;
    /**
     * 客服审核时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date auditTime;
    /**
     * 发货时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date shipTime;
    /**
     * 变更时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date updatedTime;

    /**
     * 商品购买数量
     */
    private Integer quantity;
    /**
     * 收货时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date receiptTime;
    /**
     * 订单状态
     */
    private OrderStateEnum orderStatus;
    /**
     * 代理商编号
     */
    private String agentSn;
    /**
     * 代理商id
     */
    private Long agentId;
    /**
     * 代理商名称
     */
    private String agentname;
    /**
     * 所属客服id
     */
    private Long customerId;
    /**
     * 客服姓名
     */
    private String customerName;
    /**
     * 客服备注
     */
    private String kefuRemark;
    /**
     * 所属发货员id
     */
    private Long shipperId;
    /**
     * 订单类型 正价订单；代理商活动订单；秒杀订单
     */
    private OrderTypeEnum orderType;
    /**
     * 是否已结算 0未结算；1已结算 只针对活动订单
     */
    private OrderIsSettleEnum settleState;
    /**
     * 下单来源 客服下单，代理商下单，客户下单
     */
    private OrderFromEnum orderFrom;
    /**
     * 订单码是否已推送
     */
    private OrderIsPrintEnum isOrderSnPrint;
    /**
     * 商品码是否已推送
     */
    private OrderIsPrintEnum isGoodsSnPrint;
    /**
     * 所属仓库id
     */
    private Long depotId;
    /**
     * 匹配规则
     */
    private Integer mateRule;
    /**
     * 订单流转部门
     */
    private Long deptId;
    /**
     *是否已删除 0未删除；1已删除
     */
    private OrderIsDeleteEnum isDelete;
    /**
     * 客户备注
     */
    private String remark;
    /**
     * 活动id
     */
    private String actId;
    /**
     * 订单创建时间（下单时间）
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date createdTime;

    /**
     *下单人
     */
    private String buyer;

    /**
     * 身高
     */
    private Double height;
    /**
     * 体重
     */
    private Double weight;
    /**
     * 外采价格
     */
    private Double outerPrice;
    /**
     * 商品状态
     */
    private ProductStatusEnum productStatus;
    /**
     * 客户名称（联系人）
     */
    private String contactUser;
    /**
     * 联系电话
     */
    private String contactPhone;
    /**
     * 收货地址
     */
    private String addrDetail;
    /**
     * 省
     */
    private String province;
    /**
     * 市
     */
    private String city;
    /**
     * 区/县
     */
    private String region;
    /**
     * 街道
     */
    private String town;

    /**
     * 省市县重新组合
     */
    private List<String> areaPath;
    /**
     * 审核时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date operationTime;
    /**
     * 商品货号
     */
    private String goodsSn;
    /**
     * 供应商
     */
    private String supplierName;
    /**
     * 货品编号
     */
    private String productSn;
    /**
     * 商品款号
     */
    private String styleNo;
    /**
     * 商品码-----此字段不存在
     */
    private String orderGoodsSn;
    /**
     * sku描述
     */
    private String productSkuDesp;
    /**
     * 商品图片
     */
    private String productImg;
    /**
     * 货品名称
     */
    private String productName;
    /**
     * 商品分类
     */
    private String catName;
    /**
     * 仓库名称
     */
    private String depotName;
    /**
     * 发货员名称
     */
    private String shipperName;
    /**
     * 发货员备注
     */
    private String shipperRemark;

    /**
     * 操作备注
     */
    private String operationRemark;
    /**
     * 待货天数
     */
    private Integer waitDay;
    /**
     * 操作人
     */
    private String operator;
    /**
     * 商品吗
     */
    private String goodsCode;
    /**
     * 商品id
     */
    private Long goodsId;

    /**
     * 商品id
     */
    private String goodsImg;

    /**
     * 操作列表
     */
    List<OrderOperation> operationList;

    /**
     * 用于二维码生成的商品码
     */
    private String commodityCode;

    /**
     * 货品状态
     */
    private ProductStatusEnum itemStatus;




    /**
     * 需上交款
     */
    private String needPay;

    /**
     * 需收款
     */
    private String needReceive;

    /**
     * 订单收益
     */
    private String profit;

    /**
     * 上交人
     */
    private String payer;
    /**
     * 收款人
     */
    private String receivor;

    /**
     * sys标签
     */
    private OrderSysTagEnum sysTag;

    /**
     * 活动名称
     */
    private String actName;

    /**
     * 是否换货
     */
    private WhetherEnum afterSaleTag;
    /**
     * 市场价格
     */
    private  String marketPrice;
    /**
     * 库存编码
     */
    private  String  stockSn;

    /**
     * 仓库接收入库时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date receiveTime;

    /**
     * 质检扫描时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date checkTime;


    /**
     * 封装省市县
     */
    public void wrapArea(){
        ArrayList<String> areaPathList = Lists.newArrayList();
        areaPathList.add(this.getProvince());
        areaPathList.add(this.getCity());
        areaPathList.add(this.getRegion());
        areaPathList.add(this.getTown());
        this.setAreaPath(areaPathList);
    }

    public void wrapAfterSale(AfterSale afterSale) {
        if (null != afterSale){
            this.setReceiptTime(afterSale.getReceiveTime());
            this.setCheckTime(afterSale.getCheckTime());
        }

    }
}
